In [ ]:
pip install pmdarima
pip install folium
pip install plotly
In [1]:
import numpy as np
import pandas as pd

import datetime

import plotly.express as px
import plotly.express as ex
import folium

from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.arima_model import ARIMA
from pmdarima import auto_arima   

from fbprophet import Prophet
from fbprophet.plot import plot_plotly, add_changepoints_to_plot

import plotly.graph_objects as go
import matplotlib.pyplot as plt

import warnings
warnings.filterwarnings("ignore")
In [2]:
covid_data = pd.read_excel('./pak_data-v2.xlsx')
In [3]:
covid_data.head()
Out[3]:
Date Province City New Cases Cured Cases Death Cases
0 2020-02-26 Sindh Karachi 1 0 0
1 2020-02-28 Islamabad Islamabad 1 0 0
2 2020-03-01 Sindh Karachi 1 0 0
3 2020-03-01 Islamabad Islamabad 1 0 0
4 2020-03-03 Gilgit-Baltistan Gilgit 1 0 0
In [4]:
covid_data.describe()
Out[4]:
New Cases Cured Cases Death Cases
count 1343.000000 1343.000000 1343.000000
mean 10.631422 2.212211 0.231571
std 32.221252 10.066194 0.834690
min 0.000000 0.000000 0.000000
25% 1.000000 0.000000 0.000000
50% 2.000000 0.000000 0.000000
75% 7.000000 1.000000 0.000000
max 450.000000 126.000000 8.000000

Checking Null Values

In [5]:
covid_data.isnull().sum()
Out[5]:
Date           0
Province       0
City           0
New Cases      0
Cured Cases    0
Death Cases    0
dtype: int64

Checking Data Types of Columns

In [6]:
covid_data.dtypes
Out[6]:
Date           datetime64[ns]
Province               object
City                   object
New Cases               int64
Cured Cases             int64
Death Cases             int64
dtype: object
In [7]:
min_date = covid_data.Date.min()
max_date = covid_data.Date.max()
print('First Date of Case in Pakistan : {0} \nLast Date of Case as of Now : {1} \n' .format(min_date,max_date))
First Date of Case in Pakistan : 2020-02-26 00:00:00 
Last Date of Case as of Now : 2020-04-29 00:00:00 

Make Copy of Original Data Set

In [8]:
pak_data = covid_data.copy()
len(pak_data)
Out[8]:
1343
In [9]:
pak_data['Total Confirmed Cases'] = 0
pak_data['Total Recovered'] = 0
pak_data['Total Deaths'] = 0
pak_data['Active Cases'] = 0
In [10]:
pak_data.head()
Out[10]:
Date Province City New Cases Cured Cases Death Cases Total Confirmed Cases Total Recovered Total Deaths Active Cases
0 2020-02-26 Sindh Karachi 1 0 0 0 0 0 0
1 2020-02-28 Islamabad Islamabad 1 0 0 0 0 0 0
2 2020-03-01 Sindh Karachi 1 0 0 0 0 0 0
3 2020-03-01 Islamabad Islamabad 1 0 0 0 0 0 0
4 2020-03-03 Gilgit-Baltistan Gilgit 1 0 0 0 0 0 0

Computation of Total Confirmed , Recovered , Deaths and Active Cases

In [11]:
for i in range(0, len(pak_data)):
    if (i == 0):
        pak_data['Total Confirmed Cases'].iloc[i] = pak_data['New Cases'].iloc[i]
        pak_data['Total Recovered'].iloc[i] = pak_data['Cured Cases'].iloc[i]
        pak_data['Total Deaths'].iloc[i] = pak_data['Death Cases'].iloc[i]
        pak_data['Active Cases'].iloc[i] = pak_data['New Cases'].iloc[i] - pak_data['Death Cases'].iloc[i] - pak_data['Cured Cases'].iloc[i]

    else:
        pak_data['Total Confirmed Cases'].iloc[i] = pak_data['Total Confirmed Cases'].iloc[i-1] + pak_data['New Cases'].iloc[i]
        pak_data['Total Recovered'].iloc[i] =  pak_data['Total Recovered'].iloc[i-1] + pak_data['Cured Cases'].iloc[i]
        pak_data['Total Deaths'].iloc[i] =  pak_data['Total Deaths'].iloc[i-1] + pak_data['Death Cases'].iloc[i]
        pak_data['Active Cases'].iloc[i] = pak_data['Active Cases'].iloc[i-1] + pak_data['New Cases'].iloc[i] - pak_data['Death Cases'].iloc[i] - pak_data['Cured Cases'].iloc[i]
        
        
In [12]:
pak_data.head(50)
Out[12]:
Date Province City New Cases Cured Cases Death Cases Total Confirmed Cases Total Recovered Total Deaths Active Cases
0 2020-02-26 Sindh Karachi 1 0 0 1 0 0 1
1 2020-02-28 Islamabad Islamabad 1 0 0 2 0 0 2
2 2020-03-01 Sindh Karachi 1 0 0 3 0 0 3
3 2020-03-01 Islamabad Islamabad 1 0 0 4 0 0 4
4 2020-03-03 Gilgit-Baltistan Gilgit 1 0 0 5 0 0 5
5 2020-03-06 Sindh Karachi 1 0 0 6 0 0 6
6 2020-03-08 Sindh Karachi 1 1 0 7 1 0 6
7 2020-03-09 Sindh Karachi 9 0 0 16 1 0 15
8 2020-03-10 Balochistan Quetta 1 0 0 17 1 0 16
9 2020-03-10 Sindh Karachi 1 0 0 18 1 0 17
10 2020-03-12 Gilgit-Baltistan Nagar Khas 1 0 0 19 1 0 18
11 2020-03-13 Sindh Karachi 1 0 0 20 1 0 19
12 2020-03-14 Sindh Karachi 2 1 0 22 2 0 20
13 2020-03-14 Islamabad Islamabad 1 0 0 23 2 0 21
14 2020-03-14 Sindh Sukkur 7 0 0 30 2 0 28
15 2020-03-15 Gilgit-Baltistan Gilgit 1 0 0 31 2 0 29
16 2020-03-15 Balochistan Quetta 3 0 0 34 2 0 32
17 2020-03-15 Islamabad Islamabad 1 0 0 35 2 0 33
18 2020-03-15 Punjab Lahore 2 0 0 37 2 0 35
19 2020-03-15 Sindh Sukkur 10 0 0 47 2 0 45
20 2020-03-15 Sindh Karachi 4 0 0 51 2 0 49
21 2020-03-16 Sindh Sukkur 102 0 0 153 2 0 151
22 2020-03-16 Sindh Karachi 9 0 0 162 2 0 160
23 2020-03-16 Balochistan Quetta 5 0 0 167 2 0 165
24 2020-03-16 KPK Dera Ismail Khan 14 0 0 181 2 0 179
25 2020-03-17 Punjab Dera Ghazi Khan 20 0 0 201 2 0 199
26 2020-03-17 Punjab Gujrat 1 0 0 202 2 0 200
27 2020-03-17 Punjab Lahore 3 0 0 205 2 0 203
28 2020-03-17 Sindh Sukkur 17 0 0 222 2 0 220
29 2020-03-17 Sindh Karachi 5 1 0 227 3 0 224
30 2020-03-18 Sindh Sukkur 15 0 0 242 3 0 239
31 2020-03-18 Punjab Lahore 1 0 0 243 3 0 240
32 2020-03-18 Punjab Gujrat 1 0 0 244 3 0 241
33 2020-03-18 KPK Peshawar 1 0 0 245 3 0 242
34 2020-03-18 KPK Dera Ismail Khan 1 0 0 246 3 0 243
35 2020-03-18 Islamabad Islamabad 1 0 0 247 3 0 244
36 2020-03-18 Sindh Karachi 21 0 0 268 3 0 265
37 2020-03-18 Gilgit-Baltistan Nagar Khas 6 0 0 274 3 0 271
38 2020-03-18 Gilgit-Baltistan Skardu 5 0 0 279 3 0 276
39 2020-03-18 Azad Kashmir New Mirpur 1 0 0 280 3 0 277
40 2020-03-18 KPK Mardan 2 0 1 282 3 1 278
41 2020-03-18 Gilgit-Baltistan Gilgit 6 0 0 288 3 1 284
42 2020-03-19 Punjab Lahore 8 0 0 296 3 1 292
43 2020-03-19 Sindh Karachi 5 0 0 301 3 1 297
44 2020-03-19 Punjab Gujrat 1 0 0 302 3 1 298
45 2020-03-19 Gilgit-Baltistan Skardu 1 0 0 303 3 1 299
46 2020-03-19 KPK Peshawar 4 0 0 307 3 1 303
47 2020-03-19 Balochistan Quetta 47 0 0 354 3 1 350
48 2020-03-19 Gilgit-Baltistan Nagar Khas 1 0 0 355 3 1 351
49 2020-03-19 Punjab Dera Ghazi Khan 35 0 0 390 3 1 386

How many types of Cases exists currently in Pakistan?

In [13]:
confirmed = pak_data['New Cases'].sum()
recovered = pak_data['Cured Cases'].sum()
deaths = pak_data['Death Cases'].sum()
active = confirmed - (recovered - deaths)

print('Total Confirmed Cases : {0} \nTotal Recovered Cases : {1} \nTotal Deaths Cases    : {2} \nTotal Active Cases    : {3}' .format(confirmed, recovered, deaths, active))
Total Confirmed Cases : 14278 
Total Recovered Cases : 2971 
Total Deaths Cases    : 311 
Total Active Cases    : 11618

Exploratory Data Analysis of Cases:

In [14]:
labels = ['Active Cases','Recovered Cases','Death Cases']
sizes = [active,recovered,deaths]
color= ['Orange','Green','Red']
explode = []

for i in labels:
    explode.append(0.1)
    
plt.figure(figsize= (10,6))
plt.pie(sizes, labels=labels, autopct='%3.1f%%', startangle=9, explode =explode,colors = color)
centre_circle = plt.Circle((0,0),0.60,fc='white')

fig = plt.gcf()
fig.gca().add_artist(centre_circle)
plt.title('Pakistan COVID-19 Cases',fontsize = 24)
plt.axis('equal')  
plt.tight_layout()

Day Wise Cases:

In [16]:
pak_data.groupby(['Date'])['New Cases','Cured Cases','Death Cases'].sum().reset_index()
Out[16]:
Date New Cases Cured Cases Death Cases
0 2020-02-26 1 0 0
1 2020-02-28 1 0 0
2 2020-03-01 2 0 0
3 2020-03-03 1 0 0
4 2020-03-06 1 0 0
5 2020-03-08 1 1 0
6 2020-03-09 9 0 0
7 2020-03-10 2 0 0
8 2020-03-12 1 0 0
9 2020-03-13 1 0 0
10 2020-03-14 10 1 0
11 2020-03-15 21 0 0
12 2020-03-16 130 0 0
13 2020-03-17 46 1 0
14 2020-03-18 61 0 1
15 2020-03-19 102 0 0
16 2020-03-20 71 0 1
17 2020-03-21 145 0 0
18 2020-03-22 95 1 1
19 2020-03-23 65 0 1
20 2020-03-24 187 8 1
21 2020-03-25 39 2 1
22 2020-03-26 159 1 0
23 2020-03-27 118 1 0
24 2020-03-28 118 1 3
25 2020-03-29 79 2 4
26 2020-03-30 130 7 6
27 2020-03-31 264 13 0
28 2020-04-01 142 3 5
29 2020-04-02 245 21 7
30 2020-04-03 250 0 5
31 2020-04-04 136 4 4
32 2020-04-05 573 101 5
33 2020-04-06 679 178 3
34 2020-04-07 237 13 4
35 2020-04-08 137 55 2
36 2020-04-09 273 168 7
37 2020-04-10 236 35 8
38 2020-04-11 231 23 9
39 2020-04-12 330 21 8
40 2020-04-13 346 122 2
41 2020-04-14 141 92 8
42 2020-04-15 458 371 16
43 2020-04-16 478 25 14
44 2020-04-17 463 124 8
45 2020-04-18 346 191 8
46 2020-04-19 668 241 20
47 2020-04-20 427 69 13
48 2020-04-21 876 74 12
49 2020-04-22 537 104 10
50 2020-04-23 710 106 14
51 2020-04-24 501 225 7
52 2020-04-25 568 130 12
53 2020-04-26 1209 252 28
54 2020-04-27 489 101 15
55 2020-04-28 352 29 16
56 2020-04-29 380 54 22

Daily Trend of New Cases:

In [17]:
temp = pak_data.groupby(['Date'])['New Cases','Cured Cases','Death Cases'].sum().reset_index()
fig = px.scatter(temp, x="Date", y="New Cases", color="New Cases",
                 size='New Cases', hover_data=['New Cases'],
                 color_discrete_sequence = ex.colors.cyclical.IceFire)
fig.update_layout(title_text='Trend of Daily Cases in Pakistan',
                  plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

Daily Trend of Death Cases:

In [18]:
fig = px.scatter(temp, x="Date", y="Death Cases", color="Death Cases",
                 size='Death Cases', hover_data=['Death Cases'],
                 color_discrete_sequence = ex.colors.cyclical.IceFire)
fig.update_layout(title_text='Trend of Daily Death Cases in Pakistan',
                  plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
In [19]:
fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='blue',name='Confimned Cases'))
fig.add_trace(go.Scatter(x=pak_data['Date'],y=pak_data['Active Cases'], 
                mode='lines+markers',marker_color='purple',name='Active Cases'))
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Recovered'],
                mode='lines+markers',marker_color='green',name='Recovered'))
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Deaths'], 
                mode='lines+markers',marker_color='red',name='Deaths'))
fig.update_layout(title_text='Coronavirus Cases Statistics in Pakistan',plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()

Predictive Model

I am using Python Propet API to predict Time Series base Forcasting

In [24]:
confirmed = pak_data['Total Confirmed Cases'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(pak_data['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=15)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(15)
print(forecast)


fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Confirmed Cases'],mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Total Confirmed Cases (Predicted vs Actual)')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
             ds          yhat
1343 2020-04-30  14903.885953
1344 2020-05-01  15508.807560
1345 2020-05-02  16087.404370
1346 2020-05-03  16802.187966
1347 2020-05-04  17518.052172
1348 2020-05-05  18074.298627
1349 2020-05-06  18607.183857
1350 2020-05-07  19276.609697
1351 2020-05-08  19881.531304
1352 2020-05-09  20460.128114
1353 2020-05-10  21174.911710
1354 2020-05-11  21890.775916
1355 2020-05-12  22447.022372
1356 2020-05-13  22979.907601
1357 2020-05-14  23649.333442
In [25]:
deaths = pak_data['Total Deaths'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(pak_data['Date'])
data['y'] = deaths

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=15)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(15)
print(forecast)


fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Deaths'],mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],mode='lines+markers',marker_color='red',name='Predicted'))
fig.update_layout(title_text = 'Death Cases (Predicted vs Actual) using Prophe')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
             ds        yhat
1343 2020-04-30  316.289197
1344 2020-05-01  333.333975
1345 2020-05-02  348.150029
1346 2020-05-03  366.540699
1347 2020-05-04  384.529571
1348 2020-05-05  401.030043
1349 2020-05-06  417.175169
1350 2020-05-07  434.794103
1351 2020-05-08  451.838882
1352 2020-05-09  466.654936
1353 2020-05-10  485.045606
1354 2020-05-11  503.034478
1355 2020-05-12  519.534950
1356 2020-05-13  535.680075
1357 2020-05-14  553.299010
In [31]:
recv = pak_data['Total Recovered'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(pak_data['Date'])
data['y'] = recv

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=15)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(15)
print(forecast)
#fig = plot_plotly(prop, prop_forecast)
#fig = prop.plot(prop_forecast,xlabel='Date',ylabel='Confirmed Cases')


fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Recovered'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='yellow',name='Predicted'))
fig.update_layout(title_text = 'Recovered Cases (Predicted vs Actual) using Prophet')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
             ds         yhat
1343 2020-04-30  3142.508481
1344 2020-05-01  3293.690373
1345 2020-05-02  3445.992631
1346 2020-05-03  3590.916314
1347 2020-05-04  3775.181010
1348 2020-05-05  3866.232010
1349 2020-05-06  3992.137450
1350 2020-05-07  4118.800327
1351 2020-05-08  4269.982219
1352 2020-05-09  4422.284477
1353 2020-05-10  4567.208160
1354 2020-05-11  4751.472856
1355 2020-05-12  4842.523856
1356 2020-05-13  4968.429295
1357 2020-05-14  5095.092173

Arima Model:

Arima is a statistical Model for Time Series Forcasting.We will use ARIMA to ensure Model Accuracy of Our Prediction.which one better fit in our Situation.

In [26]:
cc = pak_data['Total Deaths'].values


# fit model
p,d,q = auto_arima(cc).order
print(p,d,q)

#model = SARIMAX(chk, order=(p,d,q), seasonal_order=(0,0,0,0),measurement_error=True)#seasonal_order=(1, 1, 1, 1))
model = ARIMA(pak_data['Total Deaths'],order=(p,d,q))
arima = model.fit(disp=True)
forecast = arima.forecast(steps= 15)
pred = list(forecast[0])
print(pred)
start_date = pak_data['Date'].max()
prediction_dates = []
for i in range(15):
    date = start_date + datetime.timedelta(days=1)
    prediction_dates.append(date)
    start_date = date

fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Deaths'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prediction_dates, y=pred,
                    mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Total Deaths cases Predicted vs Actual using ARIMA')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
0 2 1
[311.4078526320672, 311.8159692932364, 312.2243499835075, 312.6329947028807, 313.04190345135584, 313.45107622893295, 313.86051303561203, 314.2702138713931, 314.68017873627616, 315.0904076302612, 315.50090055334823, 315.9116575055372, 316.32267848682824, 316.7339634972212, 317.1455125367162]

Sarima Model:

In [29]:
cc = pak_data['Total Deaths'].values


# fit model
p,d,q = auto_arima(cc).order
print(p,d,q)

model = SARIMAX(cc, order=(p,d,q), seasonal_order=(0,0,0,0),measurement_error=True) #seasonal_order=(1, 1, 1, 1))
model_fit = model.fit(disp=False)
        
# make prediction
pred = model_fit.predict(len(cc), len(cc)+7)
print(pred)
        
start_date = pak_data['Date'].max()
prediction_dates = []
for i in range(15):
    date = start_date + datetime.timedelta(days=1)
    prediction_dates.append(date)
    start_date = date

fig = go.Figure()
fig.add_trace(go.Scatter(x=pak_data['Date'], y=pak_data['Total Deaths'],mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prediction_dates, y=pred,mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Total Deaths Cases Predicted vs Actual using SARIMA')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
0 2 1
[311.38995424 311.77990849 312.16986273 312.55981697 312.94977122
 313.33972546 313.72967971 314.11963395]

Province Wise Predictions:

In [33]:
province_cases = pak_data.groupby(['Date','Province'])['New Cases','Cured Cases','Death Cases'].sum().reset_index()
In [38]:
province_cases['Total Confirmed Cases'] = 0
province_cases['Total Recovered'] = 0
province_cases['Total Deaths'] = 0
province_cases['Active Cases'] = 0

province_list = province_cases['Province'].unique()
test = province_cases.copy()
for province in province_list:
    
    province_data = province_cases[province_cases['Province'] == province]
    
    for i in range(0, len(province_data)):

        if (i == 0):
            province_data['Total Confirmed Cases'].iloc[i] = province_data['New Cases'].iloc[i]
            province_data['Total Recovered'].iloc[i] = province_data['Cured Cases'].iloc[i]
            province_data['Total Deaths'].iloc[i] = province_data['Death Cases'].iloc[i]
            province_data['Active Cases'].iloc[i] = province_data['New Cases'].iloc[i] - province_data['Death Cases'].iloc[i] - province_data['Cured Cases'].iloc[i]
        else:
            province_data['Total Confirmed Cases'].iloc[i] = province_data['Total Confirmed Cases'].iloc[i-1] + province_data['New Cases'].iloc[i]
            province_data['Total Recovered'].iloc[i] =  province_data['Total Recovered'].iloc[i-1] + province_data['Cured Cases'].iloc[i]
            province_data['Total Deaths'].iloc[i] =  province_data['Total Deaths'].iloc[i-1] + province_data['Death Cases'].iloc[i]
            province_data['Active Cases'].iloc[i] = province_data['Active Cases'].iloc[i-1] + province_data['New Cases'].iloc[i] - province_data['Death Cases'].iloc[i] - province_data['Cured Cases'].iloc[i]

    
    province_cases.update(province_data)

province_cases = province_cases.astype({"New Cases":int,"Cured Cases":int,"Death Cases":int, "Total Confirmed Cases": int,"Total Recovered":int,"Total Deaths":int,"Active Cases": int})
In [39]:
province_cases.dtypes
Out[39]:
Date                     datetime64[ns]
Province                         object
New Cases                         int32
Cured Cases                       int32
Death Cases                       int32
Total Confirmed Cases             int32
Total Recovered                   int32
Total Deaths                      int32
Active Cases                      int32
dtype: object
In [40]:
province_cases.head(50)
Out[40]:
Date Province New Cases Cured Cases Death Cases Total Confirmed Cases Total Recovered Total Deaths Active Cases
0 2020-02-26 Sindh 1 0 0 1 0 0 1
1 2020-02-28 Islamabad 1 0 0 1 0 0 1
2 2020-03-01 Islamabad 1 0 0 2 0 0 2
3 2020-03-01 Sindh 1 0 0 2 0 0 2
4 2020-03-03 Gilgit-Baltistan 1 0 0 1 0 0 1
5 2020-03-06 Sindh 1 0 0 3 0 0 3
6 2020-03-08 Sindh 1 1 0 4 1 0 3
7 2020-03-09 Sindh 9 0 0 13 1 0 12
8 2020-03-10 Balochistan 1 0 0 1 0 0 1
9 2020-03-10 Sindh 1 0 0 14 1 0 13
10 2020-03-12 Gilgit-Baltistan 1 0 0 2 0 0 2
11 2020-03-13 Sindh 1 0 0 15 1 0 14
12 2020-03-14 Islamabad 1 0 0 3 0 0 3
13 2020-03-14 Sindh 9 1 0 24 2 0 22
14 2020-03-15 Balochistan 3 0 0 4 0 0 4
15 2020-03-15 Gilgit-Baltistan 1 0 0 3 0 0 3
16 2020-03-15 Islamabad 1 0 0 4 0 0 4
17 2020-03-15 Punjab 2 0 0 2 0 0 2
18 2020-03-15 Sindh 14 0 0 38 2 0 36
19 2020-03-16 Balochistan 5 0 0 9 0 0 9
20 2020-03-16 KPK 14 0 0 14 0 0 14
21 2020-03-16 Sindh 111 0 0 149 2 0 147
22 2020-03-17 Punjab 24 0 0 26 0 0 26
23 2020-03-17 Sindh 22 1 0 171 3 0 168
24 2020-03-18 Azad Kashmir 1 0 0 1 0 0 1
25 2020-03-18 Gilgit-Baltistan 17 0 0 20 0 0 20
26 2020-03-18 Islamabad 1 0 0 5 0 0 5
27 2020-03-18 KPK 4 0 1 18 0 1 17
28 2020-03-18 Punjab 2 0 0 28 0 0 28
29 2020-03-18 Sindh 36 0 0 207 3 0 204
30 2020-03-19 Balochistan 47 0 0 56 0 0 56
31 2020-03-19 Gilgit-Baltistan 2 0 0 22 0 0 22
32 2020-03-19 KPK 4 0 0 22 0 1 21
33 2020-03-19 Punjab 44 0 0 72 0 0 72
34 2020-03-19 Sindh 5 0 0 212 3 0 209
35 2020-03-20 Gilgit-Baltistan 8 0 0 30 0 0 30
36 2020-03-20 Islamabad 5 0 0 10 0 0 10
37 2020-03-20 Punjab 19 0 0 91 0 0 91
38 2020-03-20 Sindh 39 0 1 251 3 1 247
39 2020-03-21 Balochistan 11 0 0 67 0 0 67
40 2020-03-21 Gilgit-Baltistan 25 0 0 55 0 0 55
41 2020-03-21 Islamabad 1 0 0 11 0 0 11
42 2020-03-21 KPK 8 0 0 30 0 1 29
43 2020-03-21 Punjab 59 0 0 150 0 0 150
44 2020-03-21 Sindh 41 0 0 292 3 1 288
45 2020-03-22 Balochistan 23 0 1 90 0 1 89
46 2020-03-22 Punjab 72 0 0 222 0 0 222
47 2020-03-22 Sindh 0 1 0 292 4 1 287
48 2020-03-23 Balochistan 4 0 0 94 0 1 93
49 2020-03-23 Gilgit-Baltistan 16 0 0 71 0 0 71
In [43]:
s_cases = pak_data.groupby('Province')['New Cases','Cured Cases','Death Cases'].sum().reset_index()

s_cases['Active Cases'] = s_cases['New Cases'] - s_cases['Death Cases']- s_cases['Cured Cases']

s_cases["Death Rate (per 100)"] = np.round(100*s_cases["Death Cases"]/s_cases["New Cases"],2)
s_cases["Cure Rate (per 100)"] = np.round(100*s_cases["Cured Cases"]/s_cases["New Cases"],2)

s_cases.sort_values('New Cases', ascending= False).fillna(0).style.background_gradient(cmap='coolwarm',subset=["New Cases"])\
                        .background_gradient(cmap='Blues',subset=["Death Cases"])\
                        .background_gradient(cmap='Blues',subset=["Cured Cases"])\
                        .background_gradient(cmap='Blues',subset=["Active Cases"])\
                        .background_gradient(cmap='Blues',subset=["Death Rate (per 100)"])\
                        .background_gradient(cmap='Blues',subset=["Cure Rate (per 100)"])
Out[43]:
Province New Cases Cured Cases Death Cases Active Cases Death Rate (per 100) Cure Rate (per 100)
5 Punjab 5730 1162 95 4473 1.66 20.28
6 Sindh 4956 818 85 4053 1.72 16.51
4 KPK 2160 549 114 1497 5.28 25.42
1 Balochistan 781 173 10 598 1.28 22.15
2 Gilgit-Baltistan 330 221 3 106 0.91 66.97
3 Islamabad 261 32 4 225 1.53 12.26
0 Azad Kashmir 60 16 0 44 0 26.67
In [43]:
province_cases.loc[province_cases['Province'] == 'Sindh']
Out[43]:
Date Province New Cases Cured Cases Death Cases Total Confirmed Cases Total Recovered Total Deaths Active Cases
0 2020-02-26 Sindh 1 0 0 1 0 0 1
3 2020-03-01 Sindh 1 0 0 2 0 0 2
5 2020-03-06 Sindh 1 0 0 3 0 0 3
6 2020-03-08 Sindh 1 1 0 4 1 0 3
7 2020-03-09 Sindh 9 0 0 13 1 0 12
9 2020-03-10 Sindh 1 0 0 14 1 0 13
11 2020-03-13 Sindh 1 0 0 15 1 0 14
13 2020-03-14 Sindh 9 1 0 24 2 0 22
18 2020-03-15 Sindh 14 0 0 38 2 0 36
21 2020-03-16 Sindh 111 0 0 149 2 0 147
23 2020-03-17 Sindh 22 1 0 171 3 0 168
29 2020-03-18 Sindh 36 0 0 207 3 0 204
34 2020-03-19 Sindh 5 0 0 212 3 0 209
38 2020-03-20 Sindh 39 0 1 251 3 1 247
44 2020-03-21 Sindh 41 0 0 292 3 1 288
47 2020-03-22 Sindh 0 1 0 292 4 1 287
53 2020-03-23 Sindh 33 0 0 325 4 1 320
58 2020-03-24 Sindh 79 8 0 404 12 1 391
62 2020-03-25 Sindh 9 0 0 413 12 1 400
69 2020-03-26 Sindh 4 0 0 417 12 1 404
72 2020-03-27 Sindh 19 1 0 436 13 1 422
78 2020-03-28 Sindh 29 1 0 465 14 1 450
84 2020-03-29 Sindh 33 0 2 498 14 3 481
90 2020-03-30 Sindh 33 6 3 531 20 6 505
97 2020-03-31 Sindh 141 8 0 672 28 6 638
102 2020-04-01 Sindh 33 3 3 705 31 9 665
109 2020-04-02 Sindh 52 11 1 757 42 10 705
115 2020-04-03 Sindh 69 0 3 826 42 13 771
122 2020-04-04 Sindh 9 0 1 835 42 14 779
129 2020-04-05 Sindh 42 22 1 877 64 15 798
135 2020-04-06 Sindh 50 146 2 927 210 17 700
142 2020-04-07 Sindh 55 0 1 982 210 18 754
148 2020-04-08 Sindh 50 11 2 1032 221 20 791
154 2020-04-09 Sindh 92 69 1 1124 290 21 813
160 2020-04-10 Sindh 86 9 1 1210 299 22 889
167 2020-04-11 Sindh 104 13 3 1314 312 25 977
172 2020-04-12 Sindh 93 18 5 1407 330 30 1047
177 2020-04-13 Sindh 41 30 1 1448 360 31 1057
182 2020-04-14 Sindh 66 8 4 1514 368 35 1111
189 2020-04-15 Sindh 150 133 6 1664 501 41 1122
193 2020-04-16 Sindh 282 16 4 1946 517 45 1384
200 2020-04-17 Sindh 233 5 2 2179 522 47 1610
204 2020-04-18 Sindh 138 8 1 2317 530 48 1739
208 2020-04-19 Sindh 226 34 8 2543 564 56 1923
215 2020-04-20 Sindh 227 10 5 2770 574 61 2135
221 2020-04-21 Sindh 283 30 5 3053 604 66 2383
226 2020-04-22 Sindh 319 45 0 3372 649 66 2657
232 2020-04-23 Sindh 299 15 7 3671 664 73 2934
236 2020-04-24 Sindh 274 42 2 3945 706 75 3164
243 2020-04-25 Sindh 287 30 3 4232 736 78 3418
248 2020-04-26 Sindh 383 22 3 4615 758 81 3776
253 2020-04-27 Sindh 341 60 4 4956 818 85 4053

Sindh Prediction:

In [44]:
# For Sindh
s = province_cases.loc[province_cases['Province'] == 'Sindh']

confirmed = s['Total Confirmed Cases'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(s['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=s['Date'], y=s['Total Confirmed Cases'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Sindh Confirmed Cases (Predicted vs Actual)')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
In [45]:
# For Sindh
confirmed = s['Total Deaths'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(s['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=s['Date'], y=s['Total Deaths'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='red',name='Predicted'))
fig.update_layout(title_text = 'Sindh Death Cases (Predicted vs Actual)')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
In [46]:
# For Sindh
s = province_cases.loc[province_cases['Province'] == 'Sindh']

confirmed = s['Total Recovered'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(s['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=s['Date'], y=s['Total Recovered'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='yellow',name='Predicted'))
fig.update_layout(title_text = 'Sindh Recovered Cases (Predicted vs Actual)')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.

Cities Prediction

In [48]:
cities = pak_data.groupby(['Date', 'City'])['New Cases','Cured Cases','Death Cases'].sum().reset_index()
In [49]:
cities['Total Confirmed Cases'] = 0
cities['Total Recovered'] = 0
cities['Total Deaths'] = 0
cities['Active Cases'] = 0

city_list = cities['City'].unique()
for city in city_list:
    
    
    city_data = cities[cities['City'] == city]
    
    for i in range(0, len(city_data)):

        if (i == 0):
            city_data['Total Confirmed Cases'].iloc[i] = city_data['New Cases'].iloc[i]
            city_data['Total Recovered'].iloc[i] = city_data['Cured Cases'].iloc[i]
            city_data['Total Deaths'].iloc[i] = city_data['Death Cases'].iloc[i]
            city_data['Active Cases'].iloc[i] = city_data['New Cases'].iloc[i] - city_data['Death Cases'].iloc[i] - city_data['Cured Cases'].iloc[i]
        else:
            city_data['Total Confirmed Cases'].iloc[i] = city_data['Total Confirmed Cases'].iloc[i-1] + city_data['New Cases'].iloc[i]
            city_data['Total Recovered'].iloc[i] =  city_data['Total Recovered'].iloc[i-1] + city_data['Cured Cases'].iloc[i]
            city_data['Total Deaths'].iloc[i] =  city_data['Total Deaths'].iloc[i-1] + city_data['Death Cases'].iloc[i]
            city_data['Active Cases'].iloc[i] = city_data['Active Cases'].iloc[i-1] + city_data['New Cases'].iloc[i] - city_data['Death Cases'].iloc[i] - city_data['Cured Cases'].iloc[i]

    
    cities.update(city_data)

cities = cities.astype({"New Cases":int,"Cured Cases":int,"Death Cases":int, "Total Confirmed Cases": int,"Total Recovered":int,"Total Deaths":int,"Active Cases": int})
In [50]:
c_cases = cities.groupby('City')['New Cases','Cured Cases','Death Cases'].sum().reset_index()
c_cases = c_cases.sort_values(['New Cases'], ascending=False)

c_cases['Active Cases'] = c_cases['New Cases'] - c_cases['Death Cases']- c_cases['Cured Cases']
c_cases["Death Rate (per 100)"] = np.round(100*c_cases["Death Cases"]/c_cases["New Cases"],2)
c_cases["Cure Rate (per 100)"] = np.round(100*c_cases["Cured Cases"]/c_cases["New Cases"],2)
c_cases.sort_values('New Cases', ascending= False).fillna(0).style.background_gradient(cmap='coolwarm',subset=["New Cases"])\
                        .background_gradient(cmap='Blues',subset=["Death Cases"])\
                        .background_gradient(cmap='Blues',subset=["Cured Cases"])\
                        .background_gradient(cmap='Blues',subset=["Active Cases"])\
                        .background_gradient(cmap='Blues',subset=["Death Rate (per 100)"])\
                        .background_gradient(cmap='Blues',subset=["Cure Rate (per 100)"])
Out[50]:
City New Cases Cured Cases Death Cases Active Cases Death Rate (per 100) Cure Rate (per 100)
41 Karachi 3524 354 79 3091 2.24 10.05
92 Raiwind 1925 308 0 1617 0 16
56 Lahore 1494 343 45 1106 3.01 22.96
86 Peshawar 800 44 63 693 7.88 5.5
19 Dera Ghazi Khan 794 394 0 400 0 49.62
90 Quetta 621 173 10 438 1.61 27.86
111 Sukkur 413 213 2 198 0.48 51.57
94 Rawalpindi 296 22 18 256 6.08 7.43
34 Hyderabad City 275 169 3 103 1.09 61.45
35 Islamabad 261 32 4 225 1.53 12.26
29 Gujrat 228 24 3 201 1.32 10.53
45 Khairpur 192 9 0 183 0 4.69
113 Swat 163 39 12 112 7.36 23.93
28 Gujranwala 154 5 3 146 1.95 3.25
65 Mardan 136 56 8 72 5.88 41.18
26 Ghotki 132 2 0 130 0 1.52
58 Larkana 120 10 0 110 0 8.33
104 Sialkot City 113 10 1 102 0.88 8.85
11 Buner 102 58 1 43 0.98 56.86
121 Torkham 99 0 0 99 0 0
20 Dera Ismail Khan 92 58 2 32 2.17 63.04
27 Gilgit 90 49 1 40 1.11 54.44
75 Nagar Khas 88 77 1 10 1.14 87.5
99 Shaheed Benazirabad 84 6 1 77 1.19 7.14
64 Mansehra 79 10 3 66 3.8 12.66
23 Dir Upper 79 46 0 33 0 58.23
62 Malakand 78 6 3 69 3.85 7.69
71 Multan 69 26 12 31 17.39 37.68
91 Rahimyar Khan 65 0 3 62 4.62 0
0 Abbottabad 60 17 4 39 6.67 28.33
44 Kasur 58 0 0 58 0 0
52 Kohat 58 45 3 10 5.17 77.59
24 Faisalabad 57 2 4 51 7.02 3.51
81 Nowshera 55 20 3 32 5.45 36.36
40 Jhelum 55 0 0 55 0 0
97 Sargodha 53 0 1 52 1.89 0
1 Astore 53 6 1 46 1.89 11.32
14 Charsadda 50 23 2 25 4 46
106 Skardu 49 45 0 4 0 91.84
123 Vihari 49 0 0 49 0 0
22 Dir Lower 46 20 2 24 4.35 43.48
87 Pishin 38 0 0 38 0 0
39 Jhang City 38 0 1 37 2.63 0
100 Shangla 35 13 1 21 2.86 37.14
12 Chagai 34 0 0 34 0 0
115 Tando Muhammad Khan 32 17 0 15 0 53.12
55 Kurram 30 2 2 26 6.67 6.67
63 Mandi Bahauddin 30 2 0 28 0 6.67
7 Bannu 29 19 1 9 3.45 65.52
30 Hafizabad 28 0 0 28 0 0
6 Bajaur 25 11 1 13 4 44
96 Sanghar 25 2 0 23 0 8
78 Naushahro Firoz 23 1 0 22 0 4.35
74 Muzaffargarh 23 0 0 23 0 0
37 Jaffarabad 23 0 0 23 0 0
102 Shigar 22 22 0 0 0 100
8 Batgram 22 0 0 22 0 0
5 Bahawalpur 20 0 2 18 10 0
31 Hangu 20 12 0 8 0 60
68 Mianwali 20 0 0 20 0 0
2 Attock City 19 2 1 16 5.26 10.53
17 Dadu 19 11 0 8 0 57.89
101 Sheikhupura 19 3 0 16 0 15.79
103 Shikarpur 17 0 0 17 0 0
66 Mastung 17 0 0 17 0 0
83 Okara 17 0 0 17 0 0
10 Bhimber 16 10 0 6 0 62.5
16 Chitral 16 0 0 16 0 0
38 Jamshoro 15 11 0 4 0 73.33
42 Karak 15 5 0 10 0 33.33
112 Swabi 15 12 2 1 13.33 80
77 Narowal 15 0 0 15 0 0
51 Khyber Pass 14 11 0 3 0 78.57
3 Badin 14 1 0 13 0 7.14
79 New Mirpur 13 4 0 9 0 30.77
32 Haripur 13 6 0 7 0 46.15
49 Khushab 13 0 0 13 0 0
76 Nankana Sahib 13 8 0 5 0 61.54
4 Bahawalnagar 12 2 0 10 0 16.67
21 Diamir 12 7 0 5 0 58.33
36 Jacobabad 12 1 0 11 0 8.33
15 Chiniot 11 10 0 1 0 90.91
89 Qila Abdullah 11 0 0 11 0 0
110 Sujawal 11 1 0 10 0 9.09
48 Kharmang 11 11 0 0 0 100
9 Bhakkar 10 0 0 10 0 0
114 Tando Allahyar 10 6 0 4 0 60
54 Kotli 9 0 0 9 0 0
43 Kashmore 9 0 0 9 0 0
61 Loralai 9 0 0 9 0 0
105 Sibi 8 0 0 8 0 0
118 Thatta 8 3 0 5 0 37.5
82 Nushki 8 0 0 8 0 0
84 Orakzai 7 3 0 4 0 42.86
85 Pakpattan 7 0 0 7 0 0
109 Sudhnoti 7 1 0 6 0 14.29
119 Toba Tek Singh 7 0 1 6 14.29 0
70 Mohmand 6 0 1 5 16.67 0
57 Lakki Marwat 6 6 0 0 0 100
46 Khanewal 6 0 0 6 0 0
73 Muzaffarabad 6 0 0 6 0 0
122 Umarkot 5 1 0 4 0 20
25 Ghanche 5 4 0 1 0 80
88 Poonch 5 1 0 4 0 20
69 Mirpur Khas 5 0 0 5 0 0
117 Tharparkar 4 0 0 4 0 0
80 North Waziristan 4 4 0 0 0 100
60 Lodhran 4 0 0 4 0 0
47 Kharan 4 0 0 4 0 0
67 Matiari 4 0 0 4 0 0
13 Chakwal 4 1 0 3 0 25
98 Shahdad Kot 3 0 0 3 0 0
59 Layyah 2 0 0 2 0 0
125 Ziarat 2 0 0 2 0 0
124 Zhob 2 0 0 2 0 0
120 Tor Ghar 2 0 0 2 0 0
18 Dadyal 2 0 0 2 0 0
108 South Waziristan 2 2 0 0 0 100
93 Rawala Kot 2 0 0 2 0 0
95 Sahiwal 2 0 0 2 0 0
33 Harnai 1 0 0 1 0 0
53 Kohistan 1 0 0 1 0 0
116 Tank 1 1 0 0 0 100
107 Sohbatpur 1 0 0 1 0 0
72 Musakhel 1 0 0 1 0 0
50 Khuzdar 1 0 0 1 0 0

Karachi Prediction:

In [51]:
khi = cities.loc[cities['City'] == 'Karachi']

confirmed = khi['Total Confirmed Cases'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(khi['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=khi['Date'], y=khi['Total Confirmed Cases'],mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],mode='lines+markers',marker_color='Orange',name='Predicted'))
fig.update_layout(title_text = 'Karachi Confirmed Cases (Predicted vs Actual) using Prophet')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
In [51]:
confirmed = khi['Total Deaths'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(khi['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=khi['Date'], y=khi['Total Deaths'],
                    mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],
                    mode='lines+markers',marker_color='red',name='Predicted'))
fig.update_layout(title_text = 'Karachi Death Cases (Predicted vs Actual) using Prophet')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
In [52]:
confirmed = khi['Total Recovered'].values.tolist()
data = pd.DataFrame(columns = ['ds','y'])
data['ds'] = list(khi['Date'])
data['y'] = confirmed

prop=Prophet()
prop.fit(data)
future=prop.make_future_dataframe(periods=30)
prop_forecast=prop.predict(future)
forecast = prop_forecast[['ds','yhat']].tail(30)

fig = go.Figure()
fig.add_trace(go.Scatter(x=khi['Date'], y=khi['Total Recovered'],mode='lines+markers',marker_color='green',name='Actual'))
fig.add_trace(go.Scatter(x=prop_forecast['ds'], y=prop_forecast['yhat_upper'],mode='lines+markers',marker_color='yellow',name='Predicted'))
fig.update_layout(title_text = 'Karachi Recovered Cases (Predicted vs Actual) using Prophet')
fig.update_layout(plot_bgcolor='rgb(275, 270, 273)',width=600, height=600)
fig.show()
INFO:fbprophet:Disabling yearly seasonality. Run prophet with yearly_seasonality=True to override this.
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.